查看原文
其他

大话系列 | 集成算法之随机森林

小一 小一的学习笔记 2023-01-01

关注+星标,听说他有点东西

全文共1740字,阅读全文需13分钟



写在前面的话

大家好,我是小一

这是大话系列的第6节算法,也是本系列的第14篇原创文章。


上上节提到两种集成方法,分别是Boosting和Bagging,其中上节的Adaboost算法是对Boosting 算法的一种实现,本机的随机森林算法是在Bagging 的基础上进行改进的。

文末附本系列所有文章的更新路线。



随机森林

随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,并合起来用来预测最终结果。

随机森林是一种相当简单、容易理解的方法,它的基本原理是:从原数据集中有放回的采样获得若干个子集,基于每个子集训练出不同的基分类器,再通过基分类器的投票获得最终的分类结果

对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果


1. 如何构建一棵树

随机森林中构建树的过程和决策树中构建树的过程有一些区别,主要体现在随机上。

随机森林中每棵树按照下面的规则生成:

① 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;

② 如果每个训练样本的特征维度为M,则随机的从M个总特征中选出m个特征子集,进行树的分裂。每次树进行分裂时,从这m个特征中选择最优的

③ 在每个树的生长过程中,使其尽最大程度的生长,不要剪枝。

通过上面的步骤就生成了一颗随机森林中的树。

需要注意的是:

① 每个样本被采集到的概率为:,不被采集到的概率为:,那么一个样本N次采样都没有被采集到的概率为:

即在每轮随机采样中,约有36.8%的数据没有被采样到,也就相当于在第k棵树的生成过程中,有36.8%的样本称之为oob样本(out of bag:袋外样本)

这类样本因为不参与建模过程,所以可以被作为验证数据,用来评估模型效果。所以在随机森林模型中,不需要验证集

② 从M个特征中随机选择m个特征,如果此时m=M,那么就相当于选取全部的特征,此时的树和普通的决策树并无区别。所以,当m取值越小,树的相关性和分类能力会降低;m越大,两者也会随之增大。选择最优的m则是随机森林中唯一的一个参数

上面两个随机性的引入,使得随机森林不容易陷入过拟合(数据随机和特征随机可以有效避免过拟合),并且具有很好的抗噪能力。

因为不需要考虑过拟合现象,所以在每棵树的生成过程中尽最大程度的生成,而不需要考虑剪枝



2. 如何选择优秀的特征

选择最优的特征也可以理解成特征的重要性,优秀的特征对于整个模型的重要性会比较高,不优秀的特征对于模型而言可有可无。

对于特征的重要性我们可以通过oob error(袋外错误率)来衡量,具体步骤如下:

① 对于每一棵树,选择相应的oob数据,并计算oob error1;

② 针对当前袋外数据oob 的样本特征x加入噪声干扰,再次计算袋外错误率oob error2;此处的噪声干扰可以想象成在特征x处改变样本值

③ 假设在森林中有N棵树,则特征x的重要性=

为什么这个可以体现特征x的重要性呢?

可以这样理解:在加入噪声干扰后,如果袋外错误率并没有发生变化,说明特征x对于样本的预测结果没有影响,即特征x的重要性低,反之说明特征x的重要性高。



优缺点

随机森林有许多优点:
  • 具有极高的准确率
  • 随机性的引入,使得随机森林不容易过拟合,且有很好的抗噪声能力
  • 能处理很高维度的数据,并且不用做特征选择
  • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
  • 训练速度快,可以得到变量重要性排序
  • 容易实现并行化
随机森林的缺点:
  • 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
  • 随机森林模型解释性不强,有点算黑盒模型



写在后面的话

随机森林一定要先理解思想,死记硬背真心不划算。建议先回过头去看上上一篇的集成方法再去读随机森林,理解起来应该问题不大。

这节也没有实战,和Adaboost一样,前面四篇算法的实战项目你都可以通过随机森林去建模预测,而且性能一般都会优于前面四篇算法,有兴趣的同学不妨试一下。


到今天为止算法也介绍了有一半了,其中分别是决策树、k最近邻、朴素贝叶斯、支持向量机、Adaboost和今天的随机森林

后面会陆续更新:线性回归、逻辑回归、聚类、关联规则、PCA、lgb、xgb,可能还会更几篇图的算法,比如:隐马尔可夫、条件随机场这些

如果是自己自学的话,可以先不用去看图算法,难度有点偏大,而且对于初学者用处也不大,后面如果有需求可以再去补。


更多算法可以点击文章开头的专辑




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存